package Naves;

import java.awt.Point;
import javax.swing.JLabel;

import Graficas_personajes.grafico_nave;
import Juego.Juego;

/**Nave perteneciente al juego
 * 
 * @author Javier Graff
 * @author Eric Avondet
 * @author Rodrigo Herrera
 *
 */
@SuppressWarnings("serial")
public abstract class Nave extends JLabel
{
	//ya posee una posicion al extender de jlabel
	protected Juego juego;
	protected grafico_nave Iconos;
	protected int Energia;
	protected int Potencia;
	protected int Velocidad;
	
	
	
	protected Nave(Juego j)
	{
		juego=j;
	}
	
	/**
	 * Dispara, debe implementarse
	 */
	public abstract void disparar();
	
	/**
	 * retorna la potencia de disparo de la nave
	 * @return
	 */
	public int getPot()
	{
		return Potencia;
	}
	
	/**
	 * La nave se mueve hacia la parte superior de la pantalla
	 */
	public void avanzar()
	{
		Point pos = this.getLocation();
		pos.setLocation(pos.getX(), pos.getY()-Velocidad);
		this.setLocation(pos);	
	}
	
	/**
	 *  La nave se mueve hacia la parte inferior de la pantalla
	 */
	public void retroceder()
	{
		Point pos = this.getLocation();
		pos.setLocation(pos.getX(), pos.getY()+Velocidad);
		this.setLocation(pos);	
	//	System.out.println(this.getX()+" - "+this.getY());
	}
	
	/**
	 * La nave se mueve hacia la parte derecha de la pantalla
	 */
	public void derecha()
	{
		Point pos = this.getLocation();
		pos.setLocation(pos.getX()+Velocidad, pos.getY());
		this.setLocation(pos);	
	//	System.out.println(this.getX()+" - "+this.getY());
	}
	
	/**
	 * La nave se mueve hacia la parte izquierda de la pantalla
	 */
	public void izquierda()
	{
		Point pos = this.getLocation();
		pos.setLocation(pos.getX()-Velocidad, pos.getY());
		this.setLocation(pos);	
	//	System.out.println(this.getX()+" - "+this.getY());
	}
	
	/**
	 * Movimiento hacia arriba y hacia a la derecha
	 */
	public void noreste()
	{
		avanzar();
		derecha();
	}
	
	/**
	 * Movimiento hacia arriba y hacia la izquierda
	 */
	public void noroeste()
	{
		avanzar();
		izquierda();
	}
	
	/**
	 * Movimiento hacia abajo y hacia la derecha
	 */
	public void sureste()
	{
		retroceder();
		derecha();
	}
	
	/**
	 * Movimiento hacia abajo y hacia la izquierda
	 */
	public void suroeste()
	{
		retroceder();
		izquierda();
	}
	
	/**
	 * Reduce la energia , si esa reduccion hace que la energia sea menor o igual a cero, la nave muere
	 * @param e energia que se descuenta
	 */
	public void reducirEnergia(int e)
	{
		Energia-=e;
		if (debemorir()) this.morir();
	}
	
	public int getEnergia() 
	{
		return Energia;
	}
	
	/**
	 *Chequea que la nave este viva
	 * @return true si esta viva false caso contrario
	 */
	public boolean debemorir()
	{
		return Energia <=0;
	}
	
	/**
	 * la nave deja de pertenecer al juego
	 */
	public abstract void morir();
	
	
	
	
	
	
	

}
